//#include<iostream>
//
//
//using namespace std;
//
//
//int main()
//{
//	int a, * b, * c, ** d;
//	a = 9;
//	b = &a;
//	c = b;
//	d = &c;
//	*c = 2;
//
//	//cout << a << "/q/" << &a << "/" << *a << endl;
//	cout << b << "/b/" << &b << "/" << *b << endl;
//	cout << c << "/c/" << &c << "/" << *c << endl;
//	cout << d << "/d/" << &d << "/" << *d << endl;
//}

//#define _CRT_SECURE_NO_WARNINGS 1
//#include <stdio.h>
//#include <string.h>
//#define N 100
//#define N 100
//
////����ÿһ���
//int countWords(char* line) {
//    int count = 0;
//    int in_word = 0; 
//    for (int i = 0; line[i] != '\0'; i++) {
//        if (line[i]==' ') {
//            if (in_word) {
//                count++;
//                in_word = 0; 
//            }
//        }
//        else {
//            in_word = 1; 
//        }
//    }
//    if (in_word) {
//        count++;
//    }
//    return count;
//}
//int main() {
//    char lines[N][N];    //�洢����
//    int num_lines = 0;    //����
//    int word_counts[N]; //��ÿ�е�����
//    printf("����Ӣ���ı�������\"end\"��������\n");
//    while (num_lines < N) {
//        gets(lines[num_lines]);
//        //lines[num_lines][strcspn(lines[num_lines], "\n")] = '\0';   //��\n ����\0
//        if (strcmp(lines[num_lines], "end") == 0) {
//            break;
//        }
//        word_counts[num_lines] = countWords(lines[num_lines]);
//        num_lines++;
//    }
//    printf("�����\n");
//    for (int i = 0; i < num_lines; i++) {
//        printf("��%d����%d������\n", i + 1, word_counts[i]);
//    }
//    return 0;
//}
//


//#include <stdio.h>  
//#include <string.h>  
//#include <ctype.h>  
//
//#define MAX_LINES 100 // �������100��  
//#define MAX_LENGTH 100 // ����ÿ�����100���ַ�  
//
//int main() {
//    char text[MAX_LINES][MAX_LENGTH];
//    int line_count = 0; // ��¼����  
//    int word_count; // ÿ�еĵ�����  
//
//    // ��ȡ�û����룬ֱ������"end"  
//    printf("����Ӣ���ı�������'end'��������\n");
//    while (line_count < MAX_LINES && fgets(text[line_count], MAX_LENGTH, stdin) != NULL) {
//        // ȥ����β�Ļ��з�  
//        text[line_count][strcspn(text[line_count], "\n")] = 0;
//
//        // ����Ƿ�������"end"  
//        if (strcmp(text[line_count], "end") == 0) {
//            break;
//        }
//
//        // ���㵱ǰ�еĵ�����  
//        word_count = 0;
//        int in_word = 0; // ����Ƿ��ڵ�����  
//        for (int i = 0; text[line_count][i] != '\0'; i++) {
//            if (isalpha(text[line_count][i])) { // �������ĸ�����ڵ�����  
//                if (!in_word) {
//                    word_count++; // ���ʼ�����1  
//                    in_word = 1; // ���Ϊ���ڵ�����  
//                }
//            }
//            else {
//                in_word = 0; // ���򣬱��Ϊ���ڵ�����  
//            }
//        }
//
//        // �����ǰ�еĵ�����  
//        printf("��%d����%d������\n", line_count + 1, word_count);
//
//        line_count++; // ������1  
//    }
//
//    return 0;
//}






#include<iostream>
#include <string>
#include<unordered_map>
using namespace std;
int n, m;

unordered_map<std::string, int> m1;
unordered_map<std::string, int> m2;
int main()
{

    cin >> n >> m;
    for (int j = 0; j < n; j++)
    {
        std::string str;
        cin >> str;
        //全换成小写
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] >= 'A' && str[i] <= 'Z')   //大写  -> 小写
                str[i] += 32;
        }
        m1[str]++;
    }
    for (int j = 0; j < m; j++)
    {
        std::string str;
        cin >> str;
        //全换成小写
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] >= 'A' && str[i] <= 'Z')   //大写  -> 小写
                str[i] += 32;
        }
        m2[str]++;
    }
    int N = 0;
    int U = m1.size();
    for (auto e : m2)
    {
        if (m1[e.first] != 0) //说明都有
        {
            N++;
        }
        else   //说明m2有，m1没有
        {
            U++;
        }

    }

    cout << N << " " << U;

    return 0;
}